package com.glsc.ngateway.ldap.controller;

import cn.hutool.core.util.StrUtil;
import com.glsc.ngateway.common.api.ldap.dto.LdapUserDto;
import com.glsc.ngateway.common.api.ldap.resp.LdapResponse;
import com.glsc.ngateway.ldap.service.LdapLoginService;
import com.glsc.ngateway.ldap.service.smartbi.SmartBiUserManager;
import io.swagger.annotations.ApiParam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;

@RestController
@RequestMapping("/api/smartbi")
public class SmartBiTokenController {

    Logger logger = LoggerFactory.getLogger(SmartBiTokenController.class);

    @Resource
    private SmartBiUserManager smartBiUserManager;

    @Resource
    private LdapLoginService ldapLoginService;  // ldap服务

    /**
     * 获取BI服务的token。
     *
     * @param systemId 系统标识，是必须的参数，用于识别请求的系统。
     * @param userAccount 用户账号，小写，可选参数。
     * @param biVersion BI版本，可选参数，默认为最新版本V10。用于指定使用的BI服务版本。
     * @param request HttpServletRequest对象，用于获取请求相关信息，此处未直接使用，但可能用于后续扩展。
     * @return LdapResponse 对象，包含操作结果和token。成功时，返回包含token的成功响应；失败时，返回包含错误信息的失败响应。
     */
    @GetMapping("/gettoken")
    public LdapResponse getToken(@ApiParam(required = true, value = "系统标识，字典：vdict_system_id") @RequestParam(value = "systemId", required = true) String systemId,
                                 @ApiParam(required = false, value = "用户账号，小写，选填，如果不填写需要提供网关认证的token") @RequestParam(value = "userAccount", required = false) String userAccount,
                                 @ApiParam(required = false, value = "BI版本，默认最新版本V10") @RequestParam(value = "biVersion", required = false) String biVersion,
                                 HttpServletRequest request) {

        logger.info("systemId:{}, userAccount:{}, biVersion:{}", systemId, userAccount, biVersion);
        LdapResponse response = null;
        try {
            if(StrUtil.isEmpty(userAccount)){
                LdapUserDto ldapUserDto=new LdapUserDto();
                Map<String, String> dataMap = ldapLoginService.checkTokenValid(ldapUserDto.getToken(), ldapUserDto.getSystemId(), ldapUserDto.getUserName());

                // 如果userAccount为空，则需要从请求头中获取token
            }
            String token = smartBiUserManager.getToken(userAccount, biVersion);
            response = LdapResponse.success("ok");
            response.setData(token);
        } catch (Exception e) {
            logger.error(e.getMessage());
            response = LdapResponse.error(e.getMessage());
        }
        return response;
    }

}
